package com.csw.shuanfa.SuanFa;

public class NewGood {
    public static void main(String[] args) {
        System.out.println("------------初始---------------");
        StringBuffer str1 = new StringBuffer("good");
        StringBuffer str2 = new StringBuffer("bad");
        System.out.println("str1=w1]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=w1]" + str2.hashCode() + "，" + str2.toString());

        change(str1, str2);
        System.out.println("str1=w2]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=w2]" + str2.hashCode() + "，" + str2.toString());
        System.out.println("----------------------------");
        System.out.println(str1.toString());
        System.out.println(str2.toString());
        /**
         * str1  goodnew world
         * str2   bad
         */

    }

    public static void change(StringBuffer str1, StringBuffer str2) {

        System.out.println("--------------进入-------------");
        System.out.println("str1=n1]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=n1]" + str2.hashCode() + "，" + str2.toString());
        String aa = "good";
        System.out.println("aa=n1]" + aa.hashCode() + "," + aa.toString());
        StringBuffer bb = new StringBuffer("good");
        System.out.println("bb=n1]" + bb.hashCode() + "," + bb.toString());
        /**
         * 在Java中，String和StringBuffer对象分别存在于不同的内存空间中。
         * String对象是不可变的，它们存储在字符串常量池中。字符串常量池是Java运行时环境中的一个特殊区域，用于存储字符串字面值。当你创建一个String对象时，如果字符串常量池中已经存在相同的字符串字面值，那么新的String对象将直接引用已存在的对象，而不会创建新的对象。这种共享字符串字面值的机制可以提高内存利用率。
         * StringBuffer对象是可变的，它们存储在堆内存中。当你创建一个StringBuffer对象时，它会在堆内存中分配一块空间来存储字符串内容。你可以通过调用append()、insert()等方法来修改StringBuffer对象的内容，而不会创建新的对象。StringBuffer对象适用于需要频繁修改字符串内容的场景。
         * 总结起来，String对象存储在字符串常量池中，而StringBuffer对象存储在堆内存中。String对象是不可变的，而StringBuffer对象是可变的。
         */
        System.out.println("--------str2给str1------------------");

        str2 = str1;
        System.out.println("str1=n2]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=n2]" + str2.hashCode() + "，" + str2.toString());
        System.out.println("----------str1从新new新对象-----------------");

        str1 = new StringBuffer("new world");
        System.out.println("str1=n3]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=n3]" + str2.hashCode() + "，" + str2.toString());
        System.out.println("------------str2拼接新对象---------------");

        str2.append("new world");
        System.out.println("str1=n4]" + str1.hashCode() + "，" + str1.toString());
        System.out.println("str2=n4]" + str2.hashCode() + "，" + str2.toString());
        System.out.println("----------------------------");
        /**
         * str1  new world
         * str2  goodnew world
         */
    }
}
